Divne vysledky funkci ANSICompareXXXX (W2K CZ SP2, D6.02prof)

Otázka od: Petr Fejfar

19. 9. 2002 10:22

Hi all,

narazil jsem na divne chovani funkci ANSICompareXXX(). Zde je priklad
vysledku, ktere produkuji:

'Praha 1-A' > 'Praha 10A'
'Praha 1-A' > 'Praha 10B'
'Praha 1-' < 'Praha 10' // :-OOOOO
'Praha 1' = 'Praha 1'

Umi to nekdo vysvetlit?


Thx, pf

Odpovedá: Slavek Rydval

19. 9. 2002 14:41


Ahoj,

umi. Ord ('-') < Ord ('0'). Tohle se netyka lokalniho nastaveni.

Slavek

On 19 Sep 2002 at 9:27, Petr Fejfar wrote:
> 'Praha 1-' < 'Praha 10' // :-OOOOO
> Umi to nekdo vysvetlit?

--------------------------------------------------------
http://atrey.karlin.mff.cuni.cz/~rk
Pozor, nyni pouze http://195.113.18.111/~rk/index.shtml
--------------------------------------------------------
Udelejte to blbuvzdorne a zitra nekdo vymysli jeste vetsiho blba.

Odpovedá: Petr Fejfar

19. 9. 2002 12:25

From: "Slavek Rydval" <rk@atrey.karlin.mff.cuni.cz>

> umi. Ord ('-') < Ord ('0'). Tohle se netyka lokalniho nastaveni.

Hm... ono to tak jednoduche nebude  

***

Tak tedy jeste jednou a snad srozumitelneji: umi nekdo vysvetlit, proc pri
porovnani

    ANSICompareXXX('Praha 1-', 'Praha 10') < 0

zatimco pri porovnani (pouze pridan znak 'A' na konec obou retezcu) je

    ANSICompareXXX('Praha 1-A', 'Praha 10A') > 0

prestoze by se dalo predpokladat, ze nadale plati

     ord(S1[8]<ord(S2[8])


:-OOOOOOOO, pf

Odpovedá: Lebeda David

19. 9. 2002 16:43

> ANSICompareXXX('Praha 1-', 'Praha 10') < 0
>
> zatimco pri porovnani (pouze pridan znak 'A' na konec obou retezcu) je
>
> ANSICompareXXX('Praha 1-A', 'Praha 10A') > 0
>
> prestoze by se dalo predpokladat, ze nadale plati

Zkus to jeste proverit, ale mam pocit, ze u te porovnavaci fce (ne v Delphi,
ale az v
urovni Windows) se da pomoci flagu nastavit, ze pomlcky a jine znaky ma
ignorovat.
Kolegove na neco podobneho kdysi narazili u FlashFileru a bylo to v tom,
bohuzel
blizsi info o tom nemam. Z letmeho kouknuti do SysUtils a Windows jsem to
nezjistil,
ale treba se to potvrdi.

David Lebeda

Odpovedá: Petr Fejfar

19. 9. 2002 17:25

From: "Lebeda David" <david.lebeda@comarr.cz>

> Zkus to jeste proverit, ale mam pocit, ze u te porovnavaci fce
> (ne v Delphi, ale az v urovni Windows) se da pomoci flagu nastavit,
> ze pomlcky a jine znaky ma ignorovat.

Clovece, vis ze mas pravdu?

SysUtils vola API funkci CompareString s dwCmpFlags=0, takze defaultne se
interpunkcni znamenka ignoruji !!!

Musi se tp zavolat s flagem SORT_STRINGSORT

***

To je teda ze strany Borlandu dobrej vejmrd ...  
- jeste ze se u trid tStringList aj, da overridnout metoda CompareString().


Diky za ucinne nakopnuti, pf